/*
 * Copyright (C) 2011 Johan Maasing johan at zoom.nu Licensed under the Apache
 * License, Version 2.0 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
 * or agreed to in writing, software distributed under the License is
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */
package nu.zoom.bkkit.redlung;

public class RadiationAccumulator {
	public final static int MAX_ACCUMULATED_RADIATION = 16;
	private int accumulatedRadiation = 0;

	public synchronized int getAccumulatedRadiation() {
		return accumulatedRadiation;
	}

	public synchronized void setAccumulatedRadiation(int accumulatedRadiation) {
		this.accumulatedRadiation = accumulatedRadiation;
		clampAccumulator();
	}

	public synchronized void addRadiation(int radiation) {
		this.accumulatedRadiation += radiation;
		clampAccumulator();
	}

	public synchronized void removeRadiation(int radiation) {
		this.accumulatedRadiation -= radiation;
		clampAccumulator();
	}

	private void clampAccumulator() {
		if (this.accumulatedRadiation > MAX_ACCUMULATED_RADIATION) {
			LogWrapper.fine("Clamping accumulated radiation from "
					+ this.accumulatedRadiation);
			this.accumulatedRadiation = MAX_ACCUMULATED_RADIATION;
		}
		if (this.accumulatedRadiation < 0) {
			LogWrapper.fine("Clamping accumulated radiation from "
					+ this.accumulatedRadiation);
			this.accumulatedRadiation = 0;
		}
	}
}
